package main

import (
	"context"
	"fmt"
	"github.com/redis/go-redis/v9"
	"time"
)

func main() {
	// 定义一个上下文
	ctx := context.Background()

	// 创建 Redis 客户端
	rdb := redis.NewClient(&redis.Options{
		Addr:     "m2-3094-gzhy-DeployWeb-dev.redis.imdmx.com:3094", // Redis 地址
		Password: "Yt5CCplkp7x3bvmy",                                // Redis 密码（如果没有密码，就填空字符串）
		DB:       0,                                                 // Redis 数据库，默认是 0
	})

	// 测试连接
	err := rdb.Ping(ctx).Err()
	if err != nil {
		fmt.Println("无法连接到 Redis: ", err)
		return
	}
	fmt.Println("成功连接到 Redis!")

	// 测试 set & get
	//testSetAndGet(ctx, rdb)

	testExpire(ctx, rdb)
}

func testSetAndGet(ctx context.Context, rdb *redis.Client) {
	rdb.Set(ctx, "name", "Alice", 0).Err() // 设置键值对，过期时间为 0（不过期）

	key := "name"
	val, err := rdb.Get(ctx, key).Result()
	if err == redis.Nil {
		fmt.Printf("键（%v）不存在\n", key)
	} else if err != nil {
		fmt.Println("获取失败:", err)
	} else {
		fmt.Printf("键（%v）对应的值是:%v \n", key, val)
	}

	key = "age"
	val, err = rdb.Get(ctx, key).Result()
	if err == redis.Nil {
		fmt.Printf("键（%v）不存在\n", key)
	} else if err != nil {
		fmt.Println("获取失败:", err)
	} else {
		fmt.Printf("键（%v）对应的值是:%v \n", key, val)
	}
}

func testExpire(ctx context.Context, rdb *redis.Client) {
	result := rdb.Expire(ctx, "name", time.Second*120)
	fmt.Printf("设置过期时间: %v \n", result)

	ttl, _ := rdb.TTL(ctx, "name").Result()
	fmt.Printf("剩余过期时间: %vs \n", ttl.Seconds())
}
